import request from "@/utils/request";

// 菜单基础URL
const MENU_BASE_URL = "/admin/index";
const MENU_PERMISSION_URL = "/admin/menu";

const MenuAPI = {
    /**
     * 获取菜单树形列表
     *
     * @param queryParams 查询参数
     * @returns 菜单树形列表
     */
    getList(queryParams: MenuQuery) {
        return request<any, MenuVO[]>({
            url: `${MENU_PERMISSION_URL}/list`,
            method: "get",
            params: queryParams,
        });
    },

    /**
     * 获取菜单下拉数据源
     *
     * @returns 菜单下拉数据源
     */
    getOptions(onlyParent?: boolean) {
        return request<any, OptionType[]>({
            url: `${MENU_PERMISSION_URL}/selectList`,
            method: "get",
            // params: { onlyParent: onlyParent },
        });
    },

    /**
     * 获取菜单表单数据
     *
     * @param id 菜单ID
     */
    getFormData(id: number) {
        return request<any, MenuForm>({
            url: `${MENU_PERMISSION_URL}/detail`,
            method: "get",
            params: { id: id },
        });
    },

    /**
     * 添加菜单
     *
     * @param data 菜单表单数据
     * @returns 请求结果
     */
    add(data: MenuForm) {
        return request({
            url: `${MENU_PERMISSION_URL}/add`,
            method: "post",
            data: data,
        });
    },

    /**
     * 修改菜单
     *
     * @param id 菜单ID
     * @param data 菜单表单数据
     * @returns 请求结果
     */
    update(id: string, data: MenuForm) {
        return request({
            url: `${MENU_PERMISSION_URL}/edit`,
            method: "post",
            data: data,
        });
    },

    /**
     * 删除菜单
     *
     * @param data {id}
     * @returns 请求结果
     */
    deleteById(data: any) {
        return request({
            url: `${MENU_PERMISSION_URL}/delete`,
            method: "post",
            data: data,
        });
    },

    /**
     * /admin/menu/updateStatus
     *
     * @param id 菜单ID
     * @returns 请求结果
     */
    appUpdataStatus(data: appStatusUp) {
        return request({
            url: `${MENU_PERMISSION_URL}/updateStatus`,
            method: "post",
            data: data,
        });
    },
};

export default MenuAPI;

interface appStatusUp {
    id: string;
    status: string;
}

import type { MenuTypeEnum } from "@/enums/MenuTypeEnum";

/** 菜单查询参数 */
export interface MenuQuery {
    /** 搜索关键字 */
    keywords?: string;
    /** 搜索类型 */
    menu_type?: string;
}

/** 菜单视图对象 */
export interface MenuVO {
    /** 子菜单 */
    children?: MenuVO[];
    /** 组件路径 */
    component?: string;
    /** ICON */
    icon?: string;
    /** 菜单ID */
    id?: number;
    /** 菜单名称 */
    name?: string;
    /** 父菜单ID */
    parentId?: number;
    /** 按钮权限标识 */
    perm?: string;
    /** 跳转路径 */
    redirect?: string;
    /** 路由名称 */
    routeName?: string;
    /** 路由相对路径 */
    routePath?: string;
    /** 菜单排序(数字越小排名越靠前) */
    sort?: number;
    /** 菜单 */
    type?: MenuTypeEnum;
    /** 菜单是否可见(1:显示;0:隐藏) */
    hidden?: number;
    /** 后端路由 */
    backendRoute?: string;
}

/** 菜单表单对象 */
export interface MenuForm {
    /** 菜单ID */
    id?: string;
    /** 父菜单ID */
    parentId?: number;
    /** 菜单名称 */
    name?: string;
    /** 菜单是否可见(1-是 0-否) */
    hidden?: number;
    /** ICON */
    icon?: string;
    /** 排序 */
    sort?: number;
    /** 路由名称 */
    routeName?: string;
    /** 路由路径 */
    routePath?: string;
    /** 组件路径 */
    component?: string;
    /** 跳转路由路径 */
    redirect?: string;
    /** 菜单 */
    type?: MenuTypeEnum;
    /** 权限标识 */
    perm?: string;
    /** 【菜单】是否开启页面缓存 */
    keepAlive?: number;
    /** 【目录】只有一个子路由是否始终显示 */
    alwaysShow?: number;
    /** 参数 */
    params?: KeyValue[];
    /** 后端路由 */
    backendRoute?: string;
}

interface KeyValue {
    key: string;
    value: string;
}

/** RouteVO，路由对象 */
export interface RouteVO {
    /** 子路由列表 */
    children: RouteVO[];
    /** 组件路径 */
    component?: string;
    /** 路由属性 */
    meta?: Meta;
    /** 路由名称 */
    name?: string;
    /** 路由路径 */
    path?: string;
    /** 跳转链接 */
    redirect?: string;
}

/** Meta，路由属性 */
export interface Meta {
    /** 【目录】只有一个子路由是否始终显示 */
    alwaysShow?: boolean;
    /** 是否隐藏(true-是 false-否) */
    hidden?: boolean;
    /** ICON */
    icon?: string;
    /** 【菜单】是否开启页面缓存 */
    keepAlive?: boolean;
    /** 路由title */
    title?: string;
}
